require "class.lua"
require "constantes.lua"

jogador = class:new()

-- funcao construtora
function jogador:init(nome,up, down, left, right,posicaoX,posicaoY,largura,altura,peso)
	self.nome = nome
	self.image = IMG_JOGADOR_PARADO
	self.textura = love.graphics.newQuad(0, 0, largura,altura, largura,altura)
	self.altura = altura
	self.largura = largura
	self.key = {}
	self.key[1] = up
	self.key[2] = down
	self.key[3] = left
	self.key[4] = right
	self.correndo = false
	self.pulando = false
	self.posicaoX = posicaoX
	self.posicaoY = posicaoY
	self.direcao = 1
	self.alturaMaxima = JOGADOR_ALTURA_MAXIMA
	self.podePular = true
	self.origemPulo = self.posicaoY	
	self.velocidadeMaxima = JOGADOR_VELOCIDADE_MAXIMA
	self.ind = 1
	self.contaQuadro = 0
	-- cria o corpo no mundo
	self.body = love.physics.newBody(world, posicaoX , posicaoY, peso,0)
	self.shape = love.physics.newRectangleShape(self.body,0,0,largura,altura,0)	

end

function jogador:getBody()
	return self.body
end

function jogador:setImage(imageN)
	self.image = love.graphics.newImage(imageN)
end

function jogador:draw()
	love.graphics.setFont(20)

	if self.correndo then
		love.graphics.drawq(self.image[self.ind], self.textura, self.posicaoX-(self.largura/2) - posicaoCamera , self.posicaoY-(self.altura/2) )
		self.contaQuadro = self.contaQuadro+1
		if self.contaQuadro > 10 then		
			self.ind = self.ind+1
			self.contaQuadro = 0
		end
		if self.ind > 5 then
			self.ind = 1
		end
	else
		love.graphics.drawq(self.image, self.textura, self.posicaoX-(self.largura/2) - posicaoCamera , self.posicaoY-(self.altura/2) )
	end
end

function jogador:getNome()
	return self.nome
end

function jogador:setNome( nome )
	self.nome = nome
end

function jogador:getShape()
	return self.shape
end

function jogador:setColData(Data)
	return self.shape:setData(Data)
end

function jogador:getLargura()
	return self.largura
end

function jogador:getAltura()
	return self.altura
end

function jogador:getTextura()
	return 1
end

function jogador:update()
	--trata o teclado	
	if love.keyboard.isDown(self.key[3]) then		
		self.direcao = -1
		if(self.body:getLinearVelocity() > -self.velocidadeMaxima) then
			self.body:applyForce(-FORCA_HORIZONTAL, 0)
		end
		if self.pulando == false then
			self.image = IMG_JOGADOR_CORRENDO_ESQ
			self.correndo = true
		end
	elseif love.keyboard.isDown(self.key[4]) then
		self.direcao = 1
		if(self.body:getLinearVelocity() < self.velocidadeMaxima) then
			self.body:applyForce(FORCA_HORIZONTAL, 0)
		end
		if self.pulando == false then
			self.image = IMG_JOGADOR_CORRENDO_DIR
			self.correndo = true
		end
	end
	
	-- limita a altura do pulo
	if( (self.origemPulo - self.posicaoY) > self.alturaMaxima and self.pulando == true )then
		self.podePular = false;
	end
	
	if love.keyboard.isDown(self.key[1]) then
		if( self.podePular == true ) then
			self.pulando = true
			self.correndo = false
			if self.direcao == 1 then
				self.image = IMG_JOGADOR_PULANDO_DIR
			else
				self.image = IMG_JOGADOR_PULANDO_ESQ
			end
			self.body:applyForce(0, -FORCA_VERTICAL)	
		end
	end
	
	self.posicaoX = self.body:getX();
	self.posicaoY = self.body:getY();	
end

function jogador:keyreleased(key)
	-- caso o jogador solte a tecla de pulo ele fica impossibilitado de pular ate encontrar o chao
	if key == self.key[3] then
		self.correndo = false
		self.image = IMG_JOGADOR_PARADO_ESQUERDA
	end
	if key == self.key[4] then
		self.correndo = false
		self.image = IMG_JOGADOR_PARADO
	end
	if(key == self.key[1] ) then
		self.podePular = false
	end		
end

function jogador:trataColisao( objeto, colisao )
	x,y = colisao:getNormal()
	
	if objeto.nome == "esp" then
		--reseta(levelAtual)
		isMenu = false
		isGameOver = true
		isEnd = false
	end
	
	if objeto.nome == "fim" then
		--reseta(levelAtual+1)
		isMenu = false
		isGameOver = false
		isEnd = true
	end
	
	-- caso a colisao venha de cima termina o pulo
	if( (x==0) and (y==-74) and objeto.nome ~= "chao" )then
		self.podePular = false
	end
	-- caso venho de baixo permite o pulo novamente
	if( (x==0) and (y==74) or objeto.nome == "chao")then
		self.pulando = false
		self.podePular = true
		self.origemPulo = self.posicaoY
		if self.direcao == 1 then
			self.image = IMG_JOGADOR_PARADO
		else
			self.image = IMG_JOGADOR_PARADO_ESQUERDA
		end
	end	
end

function jogador:destroi()
	self.shape:destroy()
	self.body:destroy()
end

--verifica se o clique ocorreu no objeto
function jogador:clique(x,y)
	if( math.abs(self.body:getX() - x)< self.largura/2) and ( math.abs(self.body:getY() - y) < self.altura/2)  then
		return true
	else
		return false
	end
end

--verifica se o objeto a ser inserido sobrepoe esse
function jogador:sobreposicao(x,y,l,a)
	if( math.abs(self.body:getX() - x)< (self.largura/2+l/2) ) and ( math.abs(self.body:getY() - y) < (self.altura/2+a/2))  then
		return true
	else
		return false
	end
end
